use ratatui::buffer::Buffer;
use ratatui::layout::{Alignment, Rect};
use ratatui::text::{Line, Span};
use ratatui::widgets::{Paragraph, Widget};
use crate::{config::THEME, ui::Ctx} ;
pub struct Tabs<'a> {
    cx : &'a Ctx , 
}


impl<'a> Tabs<'a> {
    pub fn new(cx : &'a Ctx) -> Self {
        Self {
            cx
        }
    }
}

impl <'a> Widget for Tabs<'a> {
    fn render(self, area: Rect , buf: &mut Buffer) {  
        // 这里解释一下buf的作用 调用render的时候 各个组件会将自己的内容和样式信息写入buf中 
        // ------------------
        // 从上下文获取标签页数据
        let tabs = self.cx.manager.tabs() ;
        // 构建标签页文本行
        let line = Line::from(
            tabs
                .iter()  // 迭代所有的标签页
                .enumerate()
                .map(|(i,_)| {
                    // 根据是否是标签页来应用不同的样式
                    if i == tabs.idx(){
                        Span::styled(format!(" {} " , i + 1) , THEME.tab.active.get())
                    } else { // 非活跃标签页
                        Span::styled(format!(" {} " , i + 1) , THEME.tab.inactive.get())
                    }
                })
                .collect::<Vec<_>>() , // 收集所有标签页的span为列表
        ) ; 
        Paragraph::new(line)
            .alignment(
                Alignment::Right
            )
            .render(area,buf) ;
    }
}

